﻿#region license
//Copyright 2009 Ritesh Rao 

//Licensed under the Apache License, Version 2.0 (the "License"); 
//you may not use this file except in compliance with the License. 
//You may obtain a copy of the License at 

//http://www.apache.org/licenses/LICENSE-2.0 

//Unless required by applicable law or agreed to in writing, software 
//distributed under the License is distributed on an "AS IS" BASIS, 
//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
//See the License for the specific language governing permissions and 
//limitations under the License. 
#endregion

using FluentNHibernate.Mapping;

namespace Rhinestone.Domain.Mappings
{
    /// <summary>
    /// Provides mappings for the <see cref="Project"/> domain entity.
    /// </summary>
    public class ProjectMap : ClassMap<Project>
    {
        /// <summary>
        /// Default Constructor.
        /// Defines mappings for the <see cref="Project"/> entity.
        /// </summary>
        public ProjectMap()
        {
            WithTable("Projects");
            Id(prop => prop.ProjectID)
                .Access.AsReadOnlyPropertyThroughCamelCaseField()
                .GeneratedBy.Identity();

            Map(prop => prop.Code).Unique();
            Map(prop => prop.Name);
            Map(prop => prop.Description);
            Map(prop => prop.Owner, "OwnerUsername").CustomTypeIs(typeof (RhinestoneUserType));
            HasMany<RhinestoneUserType>(prop => prop.Members)
                    .WithTableName("ProjectMembers")
                    .WithKeyColumn("ProjectID")
                    .AsElement("MemberUsername")
                    .AsSet();
        }
    }
}
